在學時還有工作初期,看了市面上的Java教科書發現都沒有深入探討這些List底層與關鍵要素,都只教如何使用。但這個坑常常會在面試或是追蹤效能上體現出自己的不足,所以寫一篇文章鞏固自己的觀念
搞清楚List中ArrayList & LinkedList & Vector
我目前開發最常使用的資料結構,因為ArrayList的方便性可以儲存各種物件。而真的只能用ArrayList去做這些處理嗎?如果遇到瓶頸還有甚麼解決方法呢?
接下來會以下方兩個討論去做比較
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
E elementData(int index) {
return (E) elementData[index];
}
public E get(int index) {
checkElementIndex(index);
return node(index).item;
}
Node<E> node(int index) {
// assert isElementIndex(index);
if (index < (size >> 1)) {
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
Add & Delete
記憶體空間
其實還有許多的差異與使用場景可以去探討,但就等之後如果有遇到或使用到在來補充此文章搂!
https://dotblogs.com.tw/jerryhuang0306/2016/01/30/020303
https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/ArrayList-Grow.md
List & LinkedList
差別
實作
List的底層結構是Object陣列
LinkedList是LinkedList資料結構
所有的 List
都要改為 ArrayList
,List
是 interfaceLinkedList
同時也實作 Deque
,因此有 poll
,offer
等